<template>
  <view class="image-page">
    <view class="content-wrapper" :style="{ marginTop: customMarginTop + 'rpx' }">
      <view class="avatar-wrapper">
        
        <image :src="iconFilePath" mode="aspectFill" class="avatar-img" @click="chooseAvatar"></image>
      </view>
      <button class="func-btn" @click="directPreview">选择图片显示</button>
      <button class="func-btn" @click="singlePreview">单独预览（本地）</button>
      <button class="func-btn" @click="getImageInfo">获取图片信息</button>
      <button class="func-btn" @click="downloadAndPreviewNetworkImage">下载并预览网络图片</button>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      iconFilePath: "/static/logo.png", // 初始头像路径（仅本地选择图片时更新）
      choosedImgs: [], // 存储本地选择的图片路径
      customMarginTop: 100, // 下移距离
      networkImageUrl: 'https://cdn.pixabay.com/photo/2025/11/05/20/57/monastery-9939590_1280.jpg' // 网络图片链接
    };
  },
  methods: {
    // 选择本地图片（更新头像）
    chooseAvatar() {
      uni.chooseImage({
        count: 1,
        sourceType: ['album'],
        success: (res) => {
          this.iconFilePath = res.tempFilePaths[0];
          this.choosedImgs = res.tempFilePaths;
        },
        fail: (err) => {
          console.error("选择图片失败：", err);
        }
      });
    },

    // 直接预览本地图片（选图后立即预览）
    directPreview() {
      uni.chooseImage({
        count: 1,
        sourceType: ['album'],
        success: (res) => {
          const tempPath = res.tempFilePaths[0];
          uni.previewImage({
            urls: [tempPath],
            current: 0,
            success: () => {
              this.iconFilePath = tempPath;
              this.choosedImgs = [tempPath];
            },
            fail: (err) => {
              console.error("直接预览失败：", err);
            }
          });
        },
        fail: (err) => {
          console.error("选择图片失败：", err);
        }
      });
    },

    // 单独预览本地图片（先选图再预览）
    singlePreview() {
      if (this.choosedImgs.length === 0) {
        uni.showToast({ title: '请先选择本地图片', icon: 'none' });
        return;
      }
      uni.previewImage({
        urls: this.choosedImgs,
        current: 0,
        success: () => {
          console.log("本地图片预览成功");
        },
        fail: (err) => {
          console.error("本地图片预览失败：", err);
        }
      });
    },

    // 获取本地图片信息
    getImageInfo() {
      if (this.choosedImgs.length === 0) {
        uni.showToast({ title: '请先选择本地图片', icon: 'none' });
        return;
      }
      uni.getImageInfo({
        src: this.choosedImgs[0],
        success: (infoRes) => {
          uni.showModal({
            title: '图片信息',
            content: `宽度：${infoRes.width}px\n高度：${infoRes.height}px\n格式：${infoRes.type}`,
            showCancel: false
          });
        },
        fail: (err) => {
          console.error("获取图片信息失败：", err);
        }
      });
    },

    // 下载网络图片并直接预览（不替换头像）
    downloadAndPreviewNetworkImage() {
      uni.downloadFile({
        url: this.networkImageUrl,
        success: (res) => {
          if (res.statusCode === 200) {
            const downloadedPath = res.tempFilePath;
            console.log('网络图片下载成功，临时路径：', downloadedPath);
            // 直接调用预览接口，和本地图片预览体验一致
            uni.previewImage({
              urls: [downloadedPath],
              current: 0,
              success: () => {
                console.log("网络图片预览成功");
              },
              fail: (err) => {
                console.error("网络图片预览失败：", err);
                uni.showToast({ title: '预览失败', icon: 'none' });
              }
            });
            uni.showToast({ title: '下载成功，已预览', icon: 'success' });
          }
        },
        fail: (err) => {
          console.error('网络图片下载失败：', err);
          uni.showToast({ title: '下载失败', icon: 'none' });
        },
        progress: (res) => {
          console.log('下载进度：', res.progress + '%'); // 打印下载进度日志
        }
      });
    }
  }
};
</script>

<style scoped>
.image-page {
  padding: 30rpx;
}
.content-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center;
}
.avatar-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-bottom: 30rpx;
}
.avatar-img {
  width: 200rpx;
  height: 200rpx;
  border-radius: 50%;
  border: 2rpx solid #eee;
  margin-bottom: 20rpx;
}
.func-btn {
  width: 100%;
  margin-bottom: 20rpx;
}
</style>